﻿using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AutoParsers
{

    public class MyCarGeParser : IAutoParser
    {
        HtmlWeb hw = new HtmlWeb();
        HtmlDocument doc;
        ParsedCar my_car = new ParsedCar();

        private bool status(int i)
        {
            if (i == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public ParsedCar ParseAuto(string url)
        {
            doc = hw.Load(url);

            //სურათები:
            my_car.Images = new List<string>();

            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//..//td[@width='100'][@valign='top']//table//..//img"))
            {
                my_car.Images.Add("http://mycar.ge/" + link.Attributes["src"].Value);
            }

            //ფასი:
            /*Price ცვლადი არის decimal, მე რომ ვპარსავ მომაქვს თანხა ვალუტით, ან ცალკე გააკეთეთ ვალუტის ველი ან შეუცვალეთ ამ ცვლადს ტიპი*/
            //var price = doc.DocumentNode.SelectNodes("//..//td[@class='text_14']//span[@class='text_b_red_14'][last()-1]");
            //my_car.Price = decimal.Parse(price[0].InnerText);

            //საკონტაქტო პირი:
            my_car.Owner = new Owner();

            var name = doc.DocumentNode.SelectNodes("//..//td[@class='text_14'][@align='left']");
            my_car.Owner.FullName = name[1].InnerText.Substring(18, name[1].InnerText.IndexOf('(') - 19);

            //საბაჟო:
            var custom = doc.DocumentNode.SelectNodes("//..//td[@class='text_14'][@align='left']");
            /*დასამატებელია ველი: საბაჟო - Custom nvarchar(20)*/ //BIT TYPE
            //my_car.Custom = custom[1].InnerText.Substring(custom[1].InnerText.IndexOf('-') + 1, custom[1].InnerText.Length - (custom[1].InnerText.IndexOf('-') + 1));

            //საკონტაქტო ტელეფონი:
            var tel = doc.DocumentNode.SelectNodes("//..//td[@class='text_14'][@align='left']");
            my_car.Owner.Mobile = tel[2].InnerText.Substring(22, tel[2].InnerText.Length - 22);

            //მდებარეობა:
            var loc = doc.DocumentNode.SelectNodes("//..//td[@class='text_14'][@align='left']");
            my_car.Location = loc[3].InnerText.Substring(13, loc[3].InnerText.Length - 13);

            //მოკლე აღწერა:
            var des = doc.DocumentNode.SelectNodes("//..//td[@align='left'][@class='text_14']//..//div");
            /*დასამატებელია ველი: მოკლე აღწერა - Description nvarchar(255)*/ //DONE
            //my_car.Description = des[0].InnerText;

            //ძირითადი მახასიათებლები:
            var data1 = doc.DocumentNode.SelectNodes("//..//table[@cellpadding='2'][@cellspacing='2'][@border='0'][@width='100%']//..//td[@align='left'][@width='25%'][@class='text_b_14']");
            /*დასამატებელია ველი: მწარმოებელი - Manufacturer nvarchar(20)*/
            //my_car.Manufacturer = data1[0].InnerText;
            my_car.Model = data1[1].InnerText;
            /*დასამატებელია ველი: გამოშვების წელი - Year int*/ //DONE
            //my_car.Year = data1[2].InnerText;
            my_car.Category = data1[3].InnerText;
            my_car.FuelType = data1[4].InnerText;
            /*დასამატებელია ველი: წვა 100 კმ-ზე - Burn100Km int*/ //DONE
            //my_car.Burn100Km = data1[5].InnerText;
            my_car.Engine = data1[6].InnerText;
            /*დასამატებელია ველი: ძრავის მოცულობა (სმ3) - EngineDisplacement int*/
            //my_car.EngineDisplacement = data1[7].InnerText;
            /*დასამატებელია ველი: ძარის ზომები  - ExteriorDimensions nvarchar(10)*/
            //my_car.ExteriorDimensions = data1[8].InnerText;
            my_car.Mileage = data1[9].InnerText;
            my_car.Cylinders = int.Parse(data1[10].InnerText);
            my_car.Transmission = data1[11].InnerText;
            my_car.Drive = data1[12].InnerText;
            /*დასამატებელია ველი: ტვირთამწეობა  - LoadCarryingCapacity int*/
            //my_car.LoadCarryingCapacity = data1[13].InnerText;
            /*Doors არის int, მე ვპარსავ და მოაქვს 4/5 ეს კი int-ზე არ დაიყვანება, ამიტომ მოვითხოვ ამ ცვლადის ტიპის შეცვლას :D*/
            //my_car.Doors = int.Parse(data1[14].InnerText);
            my_car.WheelType = data1[15].InnerText;
            my_car.Color = data1[16].InnerText;
            my_car.Airbags = int.Parse(data1[17].InnerText);

            //კომპლექტაცია:
            var data2 = doc.DocumentNode.SelectNodes("//..//table[@cellpadding='2'][@cellspacing='2'][@border='0'][@width='100%']//..//td[@align='left'][@width='25%']//img[@border='0'][@src]");
            /*დასამატებელია ველი: ABS  - Abs */ //DONE
            //my_car.Abs = status(int.Parse(data2[0].Attributes["src"].Value.Substring(14, 1)));
            my_car.ElWindow = status(int.Parse(data2[1].Attributes["src"].Value.Substring(14, 1)));
            my_car.AirConditioning = status(int.Parse(data2[2].Attributes["src"].Value.Substring(14, 1)));
            my_car.LeatherInterior = status(int.Parse(data2[3].Attributes["src"].Value.Substring(14, 1)));
            /*დასამატებელია ველი: დისკები - Disks */ // aris wheels
            //my_car.Disks = status(int.Parse(data2[4].Attributes["src"].Value.Substring(14, 1)));
            my_car.GPSNavigation = status(int.Parse(data2[5].Attributes["src"].Value.Substring(14, 1)));
            my_car.CentralLocking = status(int.Parse(data2[6].Attributes["src"].Value.Substring(14, 1)));
            /*დასამატებელია ველი: ლუქი - Hatch */            //es aris SealingWax
            //my_car.Hatch = status(int.Parse(data2[7].Attributes["src"].Value.Substring(14, 1)));
            my_car.Alarm = status(int.Parse(data2[8].Attributes["src"].Value.Substring(14, 1)));
            my_car.BoardComputer = status(int.Parse(data2[9].Attributes["src"].Value.Substring(14, 1)));
            my_car.Hydraulics = status(int.Parse(data2[10].Attributes["src"].Value.Substring(14, 1)));
            /*დასამატებელია ველი: სავარძლების გათბობა - Heated */
            //my_car.Heated = status(int.Parse(data2[11].Attributes["src"].Value.Substring(14, 1)));
            /*დასამატებელია ველი: პარკინგკონტროლი - Parking */
            //my_car.Parking = status(int.Parse(data2[12].Attributes["src"].Value.Substring(14, 1)));
            return my_car;
            throw new NotImplementedException();
        }
    }
}
